package work.mediway.mdm.biz.mapper.patient;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import java.util.List;
import java.util.Map;

import work.mediway.mdm.biz.vo.patient.StatisticsPatientNumVO;
import work.mediway.mdm.biz.dto.patient.PatientDTO;
import work.mediway.mdm.biz.entity.patient.PaPatient;
import work.mediway.mdm.biz.vo.patient.PatientDetailVO;
import work.mediway.mdm.biz.vo.patient.PatientListVO;

/**
 * @author zhongyj <1126834403@qq.com><br/>
 * @date 2020/12/11
 */
@Mapper
public interface PaPatientMapper extends BaseMapper<PaPatient> {
    /**
     * 按天统计患者的增长量
     *
     * @param startDate 起始时间
     * @param endDate   截止时间
     * @return List<Map < String, String>>  key: createDate, increaseNum
     */
    List<Map<String, String>> statisticsNumGroupByDay(@Param("startDate") String startDate, @Param("endDate") String endDate);

    /**
     * 统计年龄分布,完整数据
     *
     * @return List<StatisticsPatientNumVO>
     */
    List<StatisticsPatientNumVO> statisticsNumAgeComplete();

    /**
     * 统计年龄分布，不完整数据
     *
     * @return List<StatisticsPatientNumVO>
     */
    List<StatisticsPatientNumVO> statisticsNumAgeIncomplete();

    /**
     * 统计患者主索引总数
     *
     * @return StatisticsPatientNumVO
     */
    StatisticsPatientNumVO statisticsPatientTotal();

    /**
     * 统计合并患者总数
     *
     * @return StatisticsPatientNumVO
     */
    StatisticsPatientNumVO statisticsMergeTotal();

    /**
     * 统计相似患者总数
     *
     * @return StatisticsPatientNumVO
     */
    StatisticsPatientNumVO statisticsSuspectTotal();

    /**
     * 统计不完整患者总数
     *
     * @return StatisticsPatientNumVO
     */
    StatisticsPatientNumVO statisticsInCompleteTotal();

    /**
     * 分页查询患者列表信息
     *
     * @param page    Page<PatientVO>
     * @param patient PatientDTO
     * @return List<PatientVO>
     */
    List<PatientListVO> listPatientList(@Param("page") Page<PatientListVO> page, @Param("patient") PatientDTO patient);

    /**
     * 查询患者的详细信息
     *
     * @param patPatientId 平台Id
     * @param hosPatientId 院内Id
     * @return PatientDetailVO
     */
    PatientDetailVO getPatientDetail(@Param("patPatientId") String patPatientId, @Param("hosPatientId") String hosPatientId);

    /**
     * 查询最大患者ID
     *
     * @return String
     */
    @Select("SELECT MAX(PP2.PAPAT_PatientID) FROM mdm_User.PA_Patient PP2")
    String maxPatientId();

    /**
     * 查询当前ID后的数据
     *
     * @param btCurrentId 当前ID
     * @return List<PaPatient>
     */
    List<PaPatient> listByPatientId(String btCurrentId);
}